"""
homework01 - CRAPS赌博游戏 ---> 色子游戏

玩家摇两颗色子，如果第一次摇出了7点或11点，玩家胜；如果摇出了2点、3点、12点，庄家胜；
如果摇出克其他的点数，游戏继续，玩家重新摇色子；如果玩家摇出了第一次摇的点数，玩家胜；
如果玩家摇出了7点，庄家胜；如果玩家摇出其他点数，游戏继续，玩家重新摇色子，直到分出胜负。

游戏开始之前，玩家有1000元的初始资金，玩家可以下注，赢了获得下注的金额，输了就扣除下注的金额，
游戏结束的条件是玩家把钱曙光


Martin Fowler ---> 代码有很多种坏味道，中腐蚀最坏的一种。 ---> 如何去掉重复代码？？？

函数 ---> y = f(x) / z = f(x, y) / ... ---> 相对独立且会被重复使用的功能（代码）
将来想使用这些功能的时候，不需要再复制粘贴代码，而是直接通过调用函数来做到。

自变量（argument） ---> 参数(parameter)
因变量 ---> 返回值（return value）

Author: Administrator
Date: 2024/1/18
"""
import random


def roll_dice(num=2):
    """
    摇色子

    :param num: 色子的数量（对自变量进行说明）
    :return: 摇出的点数（对因变量进行说明）
    """
    total = 0
    for _ in range(num):
        total += random.randrange(1, 7)
    return total


def win():
    """赢"""
    global money
    money += zhuma
    print('玩家胜！')


def lose():
    """输"""
    global money
    money -= zhuma
    print('庄家胜！')


money = 1000
while money > 0:
    print(f'玩家总资产为{money}元.')
    zhuma = 0
    while zhuma <= 0 or zhuma > money:
        try:
            zhuma = int(input('请下注：'))
        except ValueError:
            pass
    first_point = roll_dice(2)
    print(f'玩家摇出了{first_point}点.')
    if first_point in {7, 11}:
        win()
    elif first_point in {2, 3, 12}:
        lose()
    else:
        while True:
            curr_point = roll_dice(2)
            print(f'玩家摇出了{curr_point}')
            if curr_point == first_point:
                win()
                break
            elif curr_point == 7:
                lose()
                break
print('玩家已经破产，游戏结束！')
